package cn.fansunion.leecode.linkedlist;

/**
 * 203. 移除链表元素
 * 给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。
 https://leetcode-cn.com/problems/remove-linked-list-elements/
 * @author wen.lei@brgroup.com
 *
 * 2022-2-18
 */
public class RemoveLinkedListElements {
    /*   输入：head = [1,2,6,3,4,5,6], val = 6
        输出：[1,2,3,4,5]
        示例 2：
    
        输入：head = [], val = 1
        输出：[]
        示例 3：
    
        输入：head = [7,7,7,7], val = 7
        输出：[]*/
    public ListNode removeElements(ListNode head, int val) {
        //特殊情况判断
        //head.next==null也可以走标准流程，也需要判断头结点是否需要删除
        if (head == null /*|| head.next==null*/) {
            return head;
        }
        //头结点先不判定，从第2个节点判断是否为val
        ListNode cur = head;
        while(cur!=null && cur.next!=null) {
            if(cur.next.val==val) {
                //删除目标节点:跳过目标节点
                cur.next=cur.next.next;
            }else {
                //下一个节点
                cur=cur.next;
            }
        }
        //头结点，是否为val
        if(head.val==val) {
            return head.next;
        }
        //头结点不是val的情况
        return head;

    }
}
